"""
部分输出功能接口
支持续写已有文本
"""
from typing import Optional, Dict, Any, List, Set, ClassVar
from .base import Capability, register_capability

@register_capability("partial_mode")
class PartialModeCapability(Capability):
	"""部分输出功能组件接口"""
	
	# 部分模式通常不依赖其他能力
	dependencies: ClassVar[Set[str]] = set()
	
	def _initialize(self) -> None:
		"""初始化部分模式能力"""
		super()._initialize()
		# 特定初始化代码可以添加在这里
	
	def is_supported(self) -> bool:
		"""
		判断当前提供商和模型是否支持部分模式
		
		Returns:
			是否支持
		"""
		# 默认实现，子类可以重写提供更精确的检测
		# 通常根据模型类型判断
		return True
	
	def continue_text(self, 
					prefix: str, 
					role: str = "assistant", 
					name: Optional[str] = None, 
					**kwargs) -> str:
		"""
		实现部分输出续写功能
		
		Args:
			prefix: 要续写的文本前缀
			role: 消息角色，默认为"assistant"
			name: 可选的角色名称
			**kwargs: 额外的提供商特定参数
			
		Returns:
			续写后的完整文本
		"""
		raise NotImplementedError("必须由具体实现类实现")
	
	def prepare_partial_message(self, 
							  prefix: str, 
							  role: str = "assistant", 
							  name: Optional[str] = None) -> Dict[str, Any]:
		"""
		准备部分输出消息
		
		Args:
			prefix: 文本前缀
			role: 消息角色
			name: 可选的角色名称
			
		Returns:
			格式化的消息字典
		"""
		message = {
			"role": role,
			"content": prefix
		}
		
		# 添加可选的name字段
		if name:
			message["name"] = name
			
		# 部分模式标记，具体格式由实现类定义
		message["partial"] = True
			
		return message
